# @Time    :2025/3/28 7:53
# reversed()：将一个序列翻转，返回一个反向的迭代器# reversed接受一个序列参数，返回的是一个逆迭代对象，所以需要在使用序列再转换回去
list1 = [1, 2, 3, 4, 5]
print(list(reversed(list1)))
# 输出[5, 4, 3, 2, 1]

# slice()：列表的切片# slice主要做序列切片，可以从其中切取部分重新组成新的序列
list1 = [1, 2, 3, 4, 5]
s = slice(1, 3)
print(list1[s])

# 推荐使用简写方式：lst[start:stop]
list1 = [1, 2, 3, 4, 5]
print(list1[1:3])

# bytes()：把字符串转化为bytes类型
b = bytes('@程序员小龙', encoding='utf-8')
print(b)  # b'@\xe7\xa8\x8b\xe5\xba\x8f\xe5\x91\x98\xe5\xb0\x8f\xe9\xbe\x99'

# ord()：输入字符找到对应编码的位置
print(ord('a'))  # 97
print(ord('小'))  # 31243

# chr()：输入位置数字找出对应的字符# 输出33~1000数字对应的字符
for i in range(33, 1000):
    print(chr(i), end=' ')  # 不换行

# ascii()：将Unicode字符串转换为ASCII字符串
print("ascii()：将Unicode字符串转换为ASCII字符串",ascii('Hello,@程序员小龙\n')) #换行

# 'Hello,@\u7a0b\u5e8f\u5458\u5c0f\u9f99\n'
# repr()：返回一个对象的字符串形式# repr原样输出，会过滤掉转义字符
s = 'Hello,\t@程序员\n小龙\n'
print("zzzzz--",s)
            # Hello,        @程序员
            # 小龙
print(repr(s))  # 'Hello,\t@程序员\n小龙\n'


#len()：返回一个对象中元素的个数# 获取个数
list1 = [1, 2, 3, 4, 5]
print(len(list1))

#sorted()：对可迭代对象进行排序操作# 对迭代对象进行排序，可以选择正序，逆序
list1 = [1, 5, 8, 3, 4, 2]
print(sorted(list1))
print(sorted(list1, reverse=True))

# 自定义规则
list2 = ['one', 'two', 'three', 'four', 'five', 'six']
def func(s):
    return len(s)
print(sorted(list2, key=func))


#enumerate()：获取集合的枚举对象
score_dict = {
    '张三': 33,
    '李四': 36,
    '王五': 74,
    '赵六': 56,
    '李白': 88,
    '王维': 98,
    '杜甫': 100,
    '王昌龄': 89,
    '王之涣': 97,
    '王羲之': 93
}

score_dict_sorted = sorted(score_dict.items(), key=lambda x:x[1], reverse=True)

for index, (name, score) in enumerate(score_dict_sorted, start=1):
    print(f'第{index}名：{name}\t成绩：{score}')

# 第1名：杜甫        成绩：100
# 第2名：王维        成绩：98
# 第3名：王之涣      成绩：97
# 第4名：王羲之      成绩：93
# 第5名：王昌龄      成绩：89
# 第6名：李白        成绩：88
# 第7名：王五        成绩：74
# 第8名：赵六        成绩：56
# 第9名：李四        成绩：36
# 第10名：张三       成绩：33


#all()：可迭代对象中所有元素都为True，返回结果才为Trueany()：可迭代对象中只要有一个是True，返回结果就是Truezip()：在多个迭代器上并行迭代，从每个迭代器返回一个数据项组成元组，如果各个迭代器的元素个数不同，则返回列表长度与最短的对象相同# zip可以将多个迭代器转换成元组
list1 = [1, 2, 3]
list2 = ['苹果', '香蕉', '梨']
list3 = [10, 20, 15]

for data in zip(list1, list2, list3):
    print(data)

# (1, '苹果', 10)
# (2, '香蕉', 20)
# (3, '梨', 15)


#filter()：过滤器可以接收一个自定义筛选函数，将迭代器中的元素传到函数中进行判断，用来确定是否保留这个元素。# 过滤出数据中的偶数
def func(i):
    return i % 2 == 0

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst = filter(func, list1)
print(list(lst))

# [2, 4, 6, 8]



#map()：可以对可迭代对象中的元素进行映射，分别去执行自定义函数# 给数据中每个元素加1
def func(i):
    return i + 1

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst = map(func, list1)
print(list(lst))

# [2, 3, 4, 5, 6, 7, 8, 9, 10]


